Аннотация
Описание процесса загрузки Red Hat Enterprise Linux, установка цели по умолчанию, используемой при загрузке, и загрузка системы в нестандартную цель.
Вход в систему и изменение пароля root, если текущий пароль root потерян
Самостоятельное исправление конфигурации файловой системы или устранение проблем, мешающих процессу загрузки
Выбор цели загрузки (и упражнение)
Сброс пароля root (и упражнение)
Устранение проблем с файловой системой при загрузке (и упражнение)
Управление процессом загрузки
После завершения этого раздела вы сможете:
описать процесс загрузки Red Hat Enterprise Linux;
задать цель по умолчанию, используемую при загрузке;
загрузить систему в нестандартную цель.
Современные компьютерные системы ― это сложное сочетание оборудования и программного обеспечения. Начиная с неопределенного состояния при отключенном источнике питания и заканчивая работающей системой с запросом входа, требуется слаженная совместная работа оборудования и программного обеспечения. Ниже приведен общий обзор задач, которые выполняются в физической системе x86_64, загружающей Red Hat Enterprise Linux 8. Для виртуальных машин x86_64 список практически такой же, но гипервизор выполняет некоторые действия, связанные с оборудованием, в программном обеспечении.
x86_64
Машина включена. Встроенное ПО системы (современный UEFI или классический BIOS) запускает самотестирование (POST) и начинает инициализировать часть оборудования.
Настройка осуществляется на экранах конфигурации BIOS или UEFI, доступ к которым возможен нажатием определенных клавиш, например F2, на раннем этапе процесса загрузки.
Встроенное ПО системы ищет загрузочное устройство, настроенное в UEFI, либо ищет основную загрузочную запись (Master Boot Record, MBR) на всех дисках в порядке, заданном BIOS.
Встроенное ПО системы считывает загрузчик с диска, а затем передает ему контроль над системой. В системе Red Hat Enterprise Linux 8 используется загрузчик GRand Unified Bootloader версии 2 (GRUB2).
Настройка осуществляется с помощью команды grub2-install, которая устанавливает GRUB2 в качестве загрузчика на диске.
GRUB2 загружает свою конфигурацию из файла /boot/grub2/grub.cfg и отображает меню, в котором можно выбрать загружаемое ядро.
/boot/grub2/grub.cfg
Настройка осуществляется с использованием каталога /etc/grub.d/, файла /etc/default/grub и команды grub2-mkconfig для создания файла /boot/grub2/grub.cfg.
/etc/grub.d/
/etc/default/grub
После выбора ядра или истечения времени ожидания загрузчик загружает ядро и initramfs с диска и размещает их в памяти. initramfs ― это архив, содержащий модули ядра для всего оборудования, необходимого при загрузке, сценарии инициализации и другие данные. В Red Hat Enterprise Linux 8 initramfs содержит всю необходимую систему.
initramfs
Настройка осуществляется с использованием каталога /etc/dracut.conf.d/, файла dracut и команды lsinitrd для просмотра файла initramfs.
/etc/dracut.conf.d/
Загрузчик передает контроль ядру, передавая все опции, указанные в командной строке ядра в загрузчике, а также расположение initramfs в памяти.
Ядро инициализирует все оборудование, для которого оно может найти драйвер в initramfs, а затем выполняет /sbin/init из initramfs как процесс с PID 1. В Red Hat Enterprise Linux 8 /sbin/init — это ссылка на systemd.
/sbin/init
systemd
Настройка осуществляется с помощью параметра командной строки ядра init=.
init=
Экземпляр systemd из initramfs инициализирует все юниты для цели initrd.target. Сюда входит монтирование корневой файловой системы на диске в каталог /sysroot.
initrd.target
/sysroot
Настройка осуществляется с помощью файла /etc/fstab.
/etc/fstab
Ядро переключается с корневой файловой системы initramfs на корневую файловую систему /sysroot. Затем systemd запускается повторно, используя копию systemd, установленную на диске.
systemd ищет цель по умолчанию, переданную из командной строки ядра или настроенную в системе, а затем запускает (и останавливает) юниты в соответствии с конфигурацией цели, автоматически разрешая зависимости между юнитами. По сути, цель systemd ― это набор юнитов, которые должны быть активированы, чтобы достичь нужного состояния системы. Эти цели обычно запускают текстовый или графический экран входа в систему.
Настройка осуществляется с помощью /etc/systemd/system/default.target и /etc/systemd/system/.
/etc/systemd/system/default.target
/etc/systemd/system/
Для выключения или перезагрузки работающей системы из командной строки можно использовать команду systemctl.
systemctl poweroff останавливает все работающие службы, размонтирует все файловые системы (или перемонтирует их в режиме «только чтение», если они не могут быть размонтированы), а затем выключает систему.
systemctl reboot останавливает все работающие службы, размонтирует все файловые системы и перезагружает систему.
Вы также можете использовать более короткую версию этих команд ― poweroff и reboot. Это символьные ссылки на их systemctl-эквиваленты.
Остановить систему также можно с помощью команд systemctl halt и halt, но, в отличие от poweroff, эти команды не выключают систему, а просто сводят все процессы на уровень, с которого можно безопасно выключить систему вручную.
Цель systemd — это набор юнитов systemd, которые должны быть активированы, чтобы достичь нужного состояния системы. Наиболее важные из этих целей приведены в таблице ниже.
Таблица 10.1. Часто используемые цели
graphical.target
multi-user.target
rescue.target
emergency.target
/
Цель может быть частью другой цели. Например, graphical.target включает multi-user.target, которая, в свою очередь, зависит от basic.target и других целей. Просмотреть эти зависимости можно с помощью следующей команды:
basic.target
[user@host ~]$ systemctl list-dependencies graphical.target | grep target graphical.target * └─multi-user.target * ├─basic.target * │ ├─paths.target * │ ├─slices.target * │ ├─sockets.target * │ ├─sysinit.target * │ │ ├─cryptsetup.target * │ │ ├─local-fs.target * │ │ └─swap.target ...output omitted...
[user@host ~]$
systemctl list-dependencies graphical.target | grep target
Для отображения списка доступных целей используйте следующую команду:
[user@host ~]$ systemctl list-units --type=target --all UNIT LOAD ACTIVE SUB DESCRIPTION --------------------------------------------------------------------------- basic.target loaded active active Basic System cryptsetup.target loaded active active Local Encrypted Volumes emergency.target loaded inactive dead Emergency Mode getty-pre.target loaded inactive dead Login Prompts (Pre) getty.target loaded active active Login Prompts graphical.target loaded inactive dead Graphical Interface ...output omitted...
systemctl list-units --type=target --all
Выбор цели в среде выполнения
В работающей системе администратор может переключиться на другую цель с помощью команды systemctl isolate.
[root@host ~]# systemctl isolate multi-user.target
[root@host ~]#
systemctl isolate multi-user.target
Выбор (изоляция) цели останавливает все службы, которые не требуются этой цели (и ее зависимостям), а также запускает все необходимые службы.
Не все цели можно изолировать. Можно изолировать только те цели, в файлах юнитах которых задана переменная AllowIsolate=yes. Например, можно изолировать цель graphical, но не цель cryptsetup.
AllowIsolate=yes
[user@host ~]$ systemctl cat graphical.target # /usr/lib/systemd/system/graphical.target ...output omitted... [Unit] Description=Graphical Interface Documentation=man:systemd.special(7) Requires=multi-user.target Wants=display-manager.service Conflicts=rescue.service rescue.target After=multi-user.target rescue.service rescue.target display-manager.service AllowIsolate=yes [user@host ~]$ systemctl cat cryptsetup.target # /usr/lib/systemd/system/cryptsetup.target ...output omitted... [Unit] Description=Local Encrypted Volumes Documentation=man:systemd.special(7)
systemctl cat graphical.target
systemctl cat cryptsetup.target
Установка цели по умолчанию (default)
Когда система запускается, systemd активирует цель default.target. Обычно цель по умолчанию в /etc/systemd/system/ — это символьная ссылка на graphical.target или multi-user.target. Вместо редактирования этой символьной ссылки вручную можно использовать команду systemctl с двумя подкомандами для управления ссылкой: get-default и set-default.
default.target
[root@host ~]# systemctl get-default multi-user.target [root@host ~]# systemctl set-default graphical.target Removed /etc/systemd/system/default.target. Created symlink /etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target. [root@host ~]# systemctl get-default graphical.target
systemctl get-default
systemctl set-default graphical.target
Выбор другой цели во время загрузки
Чтобы выбрать другую цель во время начальной загрузки системы, добавьте опцию systemd.unit=target.target в командную строку ядра из загрузчика.
systemd.unit=target.target
target
Например, чтобы загрузить систему с аварийной оболочкой, в которой можно изменить конфигурацию системы практически без запущенных служб, добавьте следующую опцию в командную строку ядра из загрузчика.
systemd.unit=rescue.target
Такое изменение конфигурации влияет только на одну загрузку и удобно для устранения проблем в процессе загрузки.
Чтобы выбрать другую цель, выполните следующие шаги.
Загрузите или перезагрузите систему.
Прервите обратный отсчет загрузчика, нажав любую клавишу, кроме Enter (ее нажатие приведет к обычной загрузке).
Установите курсор на запись ядра, которое требуется загрузить.
Нажмите e для редактирования текущей записи.
Установите курсор на строку, начинающуюся с linux. Это командная строка ядра.
linux
Добавьте systemd.unit=target.target. Пример: systemd.unit=emergency.target.
systemd.unit=emergency.target
Нажмите Ctrl+x, чтобы выполнить загрузку с учетом изменений.
info grub2 (руководство по GNU GRUB)
Man-страницы bootup(7), dracut.bootup(7), lsinitrd(1), systemd.target(5), systemd.special(7), sulogin(8) и systemctl(1)
Дополнительные сведения см. в главе Managing services with systemd руководства Configuring basic system settings: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/configuring_basic_system_settings/#managing-services-with-systemd